home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / lisp / gcl-1.000 / gcl-1 / gcl-1.0 / mp / mp_bfffo.c < prev    next >
Encoding:
Text File  |  1994-05-07  |  1.5 KB  |  54 lines

  1.  
  2. /*          Copyright (C) 1994 W. Schelter
  3.  
  4. This file is part of GNU Common Lisp, herein referred to as GCL
  5.  
  6. GCL is free software; you can redistribute it and/or modify it under
  7. the terms of the GNU LIBRARY GENERAL PUBLIC LICENSE as published by
  8. the Free Software Foundation; either version 2, or (at your option)
  9. any later version.
  10.  
  11. GCL is distributed in the hope that it will be useful, but WITHOUT
  12. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13. FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14. for more details.
  15.  
  16. You should have received a copy of the GNU library general public
  17. license along with GCL; see the file COPYING.  If not, write to the
  18. Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  19. */
  20.  
  21. /*
  22.      double i; ulong x;
  23.         index of the first non zero bit numbering from left 
  24.       Bit position measured from most significant end
  25.       to the first non zero bit of x
  26.      if (x == 2^i) bfffo(x) == (31 - truncate(i))
  27.        else if (x==0) 32
  28.  
  29.      [truncate (i) chops off the decimal places]
  30.      
  31.      bfffo(0) == 32
  32.      bfffo(1) == 31
  33.      bfffo(2) == 30
  34.      bfffo(3) == 30
  35.      bfffo(4) == 29
  36.      bfffo(5) == 29
  37.      ..
  38.      
  39. */  
  40.  
  41.  
  42. int bfffo(x)
  43.      unsigned long x;
  44. {
  45.   int sc;
  46.   static int tabshi[16]={4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0};
  47.  
  48.   if(x&(0xffff0000)) sc=0;else {sc=16;x<<=16;}
  49.   if(!(x&(0xff000000))) {sc+=8;x<<=8;}
  50.   if(x&(0xf0000000)) x>>=28;else {sc+=4;x>>=24;}
  51.   sc+=tabshi[x];return sc;
  52. }
  53.  
  54.